package inge_soft.gestoriusNuevo.business.controller.validation;

import java.util.Map;

import org.zkoss.bind.Property;
import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;

public class ValidadorUsuarioRegistrado extends AbstractValidator {

	private static final int LONGITUD_NOMBRE_MINIMA = 5;
	
	public void validate(ValidationContext ctx) {
		
		Map<String, Property> beanProps = ctx.getProperties(ctx.getProperty().getBase());
		
		validarVacios(ctx, 
				(String) beanProps.get("nick").getValue(),
				(String) beanProps.get("contrasenia").getValue(),
				(String) beanProps.get("retypedPassword").getValue()
				);
		
		validarLongitud(ctx, (String) beanProps.get("nick").getValue());
		
		validarContrasenias(ctx, 
				(String) beanProps.get("contrasenia").getValue(),
				(String) beanProps.get("retypedPassword").getValue()
				);
	}
	
	private void validarLongitud(ValidationContext ctx, String nick) {
		if (nick.length() < LONGITUD_NOMBRE_MINIMA) {
			this.addInvalidMessage(ctx, "nick","El nombre de usuario debe tener al menos " + LONGITUD_NOMBRE_MINIMA + " caracteres");
		}
	}
	
	private void validarContrasenias(ValidationContext ctx, String contrasenia, String contraseniaRetipeada) {
		if (!contrasenia.equals(contraseniaRetipeada)) {
			this.addInvalidMessage(ctx, "contrasenia","Las contrasenias no coinciden");
		}
	}
	
	private void validarVacios(ValidationContext ctx, String nick, String contrasenia, String contraseniaRetipeada) {
		if (!validarString(nick) || !validarString(contrasenia) || !validarString(contraseniaRetipeada)) {
			this.addInvalidMessage(ctx, "nick","Se deben ingresar todos los campos obligatorios [*]");
		}
	}
	
	private boolean validarString(String cadena) {
		if (cadena == null) {
			return false;
		}
		if (cadena.isEmpty()) {
			return false;
		}
		return true;
	}
}
